package org.zjt.spark.book

import org.apache.spark.mllib.clustering.{KMeans, KMeansModel}
import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.{SparkConf, SparkContext}

/**
  * DESC    K均值：  得到分类后的中心坐标族点，根据族点判断是哪一个范畴。
  *         1、Vectors.dense   将数组转化为坐标。         例如：数组：[x,y] -> 坐标：[x,y]
  *
  * @author
  * @create 2017-06-27 下午3:45
  **/
object KDistance extends App {
  var sparkConf = new SparkConf().setMaster("local[2]").setAppName("WeatherSort")
  val sc = new SparkContext(sparkConf)
  val rdd = sc.textFile("D:\\Idea workspace\\scala-demo\\src\\main\\resource\\K.log").map {
    line => {
      val array: Array[String] = line.split("\t")
      val vectors =Vectors.dense(array.drop(1).map(_.toDouble))
      // println(vectors)    将数组转化为坐标。 [219.15803789289006,317.8395179733959]
      vectors
    }
  }

  val model: KMeansModel = KMeans.train(rdd, 4, 50000)

  println("得到的中心族点:")
  for (a <- model.clusterCenters) {
    println("\t" + a)
  }



  println(model.predict(Vectors.dense(Array(17.1,87))))

  val score = model.computeCost(rdd)
  println(s"本次训练花费$score") //2000 4425484.980976261  5000 2675845.122032835
  sc.stop()
}
